package api

import (
	"github.com/labstack/echo/v4"
	"longmen/server/pkg/common/api_models"
	"longmen/server/pkg/common/helper/const"
	"longmen/server/pkg/common/helper/util"
)

// @Summary 短视频分类
// @Description 短视频分类
// @Accept json
// @Produce json
// @Tags Video
// @Success 200 object []models_live.VideoCategory "result"
// @Router /api/video/category [POST]
func (base *Controller) VideoCategory(c echo.Context) error {
	resp, err := base.Service.VideoCategory()
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 分类推荐
// @Description 分类推荐
// @Accept json
// @Produce json
// @Tags Video
// @Param sendBody body api_models.VideoSuggestionReq true "body"
// @Success 200 object []api_models.VideoSuggestionResp "result"
// @Router /api/video/suggestion [POST]
func (base *Controller) VideoSuggestion(c echo.Context) error {
	r := &api_models.VideoSuggestionReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	resp, err := base.Service.VideoSuggestion(r)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 短视频
// @Description 短视频
// @Accept json
// @Produce json
// @Tags Video
// @Success 200 object []models_live.Video "result"
// @Router /api/video/random [POST]
func (base *Controller) VideoRandom(c echo.Context) error {
	resp, err := base.Service.VideoRandom()
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 短视频
// @Description 短视频
// @Accept  json
// @Produce  json
// @Tags Video
// @Param sendBody body api_models.VideoReq true "body"
// @Success 200 object models_live.Video "result"
// @Router /api/video/play [POST]
func (base *Controller) VideoPlay(c echo.Context) error {
	r := &api_models.VideoReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	resp, err := base.Service.VideoPlay(r.ID)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 短视频搜索列表
// @Description 短视频搜索列表
// @Accept json
// @Produce json
// @Tags Video
// @Param sendBody body api_models.VideoSearchReq true "body"
// @Success 200 object api_models.VideoSearchResp "result"
// @Router /api/video/search [POST]
func (base *Controller) VideoSearch(c echo.Context) error {
	r := &api_models.VideoSearchReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	resp, err := base.Service.VideoSearch(r)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 热门短视频
// @Description 热门短视频
// @Accept json
// @Produce json
// @Tags Video
// @Success 200 object models_live.Video "result"
// @Router /api/video/hot [POST]
func (base *Controller) VideoHot(c echo.Context) error {
	resp, err := base.Service.VideoHot()
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 短视频热门列表
// @Description 短视频热门列表
// @Accept json
// @Produce json
// @Tags Video
// @Success 200 object models_live.Video "result"
// @Router /api/video/hot_rank [POST]
func (base *Controller) VideoRank(c echo.Context) error {
	resp, err := base.Service.VideoRank()
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 短视频点赞
// @Description 短视频点赞
// @Accept json
// @Produce json
// @Tags Video
// @Param sendBody body api_models.VideoReq true "body"
// @Success 200 object api_models.VideoStatusResp "result"
// @Router /api/video/like [POST]
func (base *Controller) VideoLike(c echo.Context) error {
	r := &api_models.VideoReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	resp, err := base.Service.VideoLike(r)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 短视频分享记数
// @Description 短视频分享记数
// @Accept  json
// @Produce  json
// @Tags Video
// @Param sendBody body api_models.VideoReq true "body"
// @Success 200 object api_models.VideoStatusResp "result"
// @Router /api/video/share [POST]
func (base *Controller) VideoShare(c echo.Context) error {
	r := &api_models.VideoReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	resp, err := base.Service.VideoShare(r)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 短视频回放分类
// @Description 短视频回放分类
// @Accept  json
// @Produce  json
// @Tags Video
// @Success 200 object []models_live.VideoReplyCategory "result"
// @Router /api/video/reply_category [POST]
func (base *Controller) VideoReplyCategory(c echo.Context) error {
	r := &api_models.VideoReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	resp, err := base.Service.VideoReplyCategory(r)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 短视频回放二层文件夹分类
// @Description 短视频回放二层文件夹分类
// @Accept json
// @Produce json
// @Tags Video
// @Param sendBody body api_models.VideoReplyChildCategoryReq true "body"
// @Success 200 object []models_live.VideoReplyCategory "result"
// @Router /api/video/reply_child_category [POST]
func (base *Controller) VideoReplyChildCategory(c echo.Context) error {
	r := &api_models.VideoReplyChildCategoryReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	resp, err := base.Service.VideoReplyChildCategory(r)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 短视频回放二层分类列表
// @Description 短视频回放二层分类列表
// @Accept  json
// @Produce  json
// @Tags Video
// @Param sendBody body api_models.VideoReplyReq true "body"
// @Success 200 object api_models.VideoReplyResp "result"
// @Router /api/video/reply_child_list [POST]
func (base *Controller) VideoReplyChildList(c echo.Context) error {
	r := &api_models.VideoReplyReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	resp, err := base.Service.VideoReplyList(r)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 短视频回放列表
// @Description 短视频回放列表
// @Accept  json
// @Produce  json
// @Tags Video
// @Param sendBody body api_models.VideoReplyReq true "body"
// @Success 200 object api_models.VideoReplyResp "result"
// @Router /api/video/reply_list [POST]
func (base *Controller) VideoReplyList(c echo.Context) error {
	r := &api_models.VideoReplyReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	resp, err := base.Service.VideoReplyList(r)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}
